function * gen(){

}
let it = gen();
console.log(it[Symbol.iterator]); //[Function: [Symbol.iterator]]
it.next();

const someObj = {
  /* *[Symbol.iterator] () {
    yield 'a';
    yield 'b';
  }*/
  //↑ 等价 ↓
 [Symbol.iterator]: function* () {
    yield 'a';
    yield 'b';
  }
}

/** ...也会用到迭代 */
console.log(...someObj); // 'a', 'b'


/** of也会用到迭代 */
for(let key of someObj){
  console.log('====================================');
  console.log(key);
  console.log('====================================');
}
/*
====================================
a
====================================
====================================
b
====================================
*/



let likeArray = {
  0:1,
  1:2,
  2:3,
  length: 3,

  [Symbol.iterator]: function* () {
    let index = 0;
    let len = this.length;
    while (len !== index) {
      yield this[index++];

      // index++
      // yield 123;
    }
  },

  /** 多种写法 你也可以不用生成器的写法 而是返回一个next也可以*/
  /*[Symbol.iterator](){
    let index = 0;
    return {
      next: () => {
        return {
          value: this[index],
          done: index++ == this.length
        }
      }
    }
  }*/
}

let arr = [...likeArray];
console.log(arr); //[ 1, 2, 3 ]
